home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 021-030 / amok29 / discopper / discopper.mod < prev    next >
Text File  |  1993-11-04  |  9KB  |  340 lines

  1. (*---------------------------------------------------------------------------
  2.     :Program.     DisCopper.mod
  3.     :Contents.      Zeigt CopLists und CprLists des aktiven View
  4.     :Author.      Bernd Preusing
  5.     :Address.      Gerhardstr. 16  D-2200 Elmshorn
  6.     :Phone.      04121/22486
  7.     :Copyright.      Public Domain
  8.     :Language.      Modula-2
  9.     :Translator.  M2Amiga V3.2e
  10.     :History.      V 1.0  01-May-89
  11.     :Bugs.      none
  12.     :Remark.      Benutzt InOut, also Ausgabe via '>filename' umleiten!
  13.     :Remark.      Kein schönes Modul, aber es ist ja eigentlich ein
  14.     :Reamrk.      Wegwerfprodukt.
  15. ---------------------------------------------------------------------------*)
  16. IMPLEMENTATION MODULE DisCopper;
  17.  
  18. FROM SYSTEM    IMPORT    CAST, BITSET, ADR, ADDRESS;
  19. IMPORT Graphics;
  20. FROM Graphics    IMPORT    CopListPtr, CopInsPtr, CopIns, move, wait, next,
  21.             UCopListPtr, ViewModes, ViewModeSet, ViewPortPtr;
  22. FROM InOut    IMPORT    Write, WriteString, WriteInt, WriteHex, WriteLn;
  23.  
  24. TYPE
  25.      UByte = [0..255];
  26.      MyCopIns = RECORD
  27.           CASE :CARDINAL OF
  28.           | 0: w1,w2:BITSET;
  29.           | 1: reg, data: CARDINAL; (* move *)
  30.           | 2: vPos, hPos, vEn, hEn: UByte; (* wait *)
  31.           END;
  32.         END;
  33.      MyCopInsPtr = POINTER TO MyCopIns;
  34.  
  35.  
  36. VAR
  37.   GfxBase: Graphics.GfxBasePtr;
  38.   a: MyCopInsPtr;
  39.   i,max:INTEGER;
  40.  
  41.  
  42. PROCEDURE Spc(Anz:INTEGER);
  43. VAR i:INTEGER;
  44. BEGIN
  45.   FOR i:=1 TO Anz DO Write(' ') END
  46. END Spc;
  47.  
  48. PROCEDURE ShowMode(v: ViewModeSet);
  49. BEGIN
  50.   IF hires IN v THEN WriteString('hires,') END;
  51.   IF sprites IN v THEN WriteString('sprites,') END;
  52.   IF vpHide IN v THEN WriteString('vpHide,') END;
  53.   IF ham IN v THEN WriteString('ham,') END;
  54.   IF dualpf IN v THEN WriteString('dualpf,') END;
  55.   IF extraHalfbrite IN v THEN WriteString('EHB,') END;
  56.   IF pfba IN v THEN WriteString('pfba,') END;
  57.   IF lace IN v THEN WriteString('lace,') END;
  58. END ShowMode;
  59.  
  60. VAR
  61.   LastVal: CARDINAL; (* für High-Werte HL *)
  62.  
  63. PROCEDURE ShowReg(reg,val:CARDINAL);
  64. TYPE Double=RECORD
  65.         CASE :INTEGER OF
  66.         | 0: y,x:UByte;
  67.         | 1: i: INTEGER;
  68.         | 3: c: CARDINAL;
  69.         | 2: b: BITSET;
  70.         END
  71.         END;
  72. VAR D: Double;
  73.  
  74.   PROCEDURE ShowVal;
  75.   BEGIN
  76.     WriteString(' ($');
  77.     WriteHex(LastVal*65536+val,8);
  78.     Write(')');
  79.   END ShowVal;
  80.  
  81. BEGIN
  82.       D.c:=val;
  83.       reg:=CAST(CARDINAL,CAST(BITSET,reg)-BITSET{9..15});
  84.       CASE reg OF
  85.       | 80H: WriteString('Cop1LcH');
  86.       | 82H: WriteString('Cop1LcL');
  87.                ShowVal;
  88.       | 84H: WriteString('Cop2LcH');
  89.       | 86H: WriteString('Cop2LcL');
  90.                ShowVal;
  91.       | 88H: WriteString('CopJmp1');
  92.       | 8AH: WriteString('CopJmp2');
  93.       | 8EH:    WriteString('DiWStrt (y=');
  94.         WriteInt(val/256,0);
  95.         WriteString(', x=');
  96.         WriteInt(val REM 256,0);
  97.         Write(')');
  98.       | 90H:    WriteString('DiWStop (y=');
  99.         IF D.y>=128 THEN
  100.           WriteInt(D.y,0);
  101.         ELSE
  102.           WriteInt(D.y+256,0);
  103.         END;
  104.         WriteString(', x=');
  105.         WriteInt(D.x+256,0);
  106.         Write(')');
  107.       | 92H: WriteString('DDFStrt');
  108.       | 94H: WriteString('DDFStop');
  109.       | 96H: WriteString('DMACon');
  110.       | 9AH: WriteString('IntEna');
  111.       | 9CH: WriteString('IntReq');
  112.       | 0E0H..0FEH:
  113.               DEC(reg,0DCH);
  114.               WriteString('Bpl');
  115.               WriteInt(reg/4,1);
  116.               IF (reg REM 4) = 0 THEN
  117.           WriteString('PtH');
  118.         ELSE
  119.           WriteString('PtL');
  120.           ShowVal;
  121.         END;
  122.       | 100H: WriteString('BplCon0 (');
  123.         IF 15 IN D.b THEN
  124.           WriteString('HiRes, ');
  125.           EXCL(D.b,15);
  126.         END;
  127.         WriteInt(D.i/4096,0);
  128.         WriteString(' Planes, ');
  129.         IF 11 IN D.b THEN
  130.           WriteString('Ham, ');
  131.         END;
  132.         IF 10 IN D.b THEN
  133.           WriteString('DblPf, ');
  134.         END;
  135.         IF 9 IN D.b THEN
  136.           WriteString('Color, ');
  137.         END;
  138.         IF 2 IN D.b THEN
  139.           WriteString('Lace, ');
  140.         END;
  141.         Write(')');
  142.       | 102H: WriteString('BplCon1 (Pf2H=');
  143.         WriteInt(D.x/16,0);
  144.         WriteString(', Pf1H=');
  145.         WriteInt(D.x REM 16,0);
  146.         Write(')');
  147.       | 104H: WriteString('BplCon2 (');
  148.         IF 6 IN D.b THEN
  149.           WriteString('Pf2Pri)');
  150.         ELSE
  151.           WriteString('Pf1Pri)');
  152.         END;
  153.       | 108H: WriteString('Bpl1Mod (Val=');
  154.               WriteInt(D.i,0);
  155.               Write(')');
  156.       | 10AH: WriteString('Bpl2Mod (Val=');
  157.               WriteInt(D.i,0);
  158.               Write(')');
  159.       | 120H..13EH:
  160.         DEC(reg,120H);
  161.         WriteString('Spr');
  162.         Write(CHAR(reg/4+30H));
  163.         WriteString('Pt');
  164.         IF (reg REM 4)=0 THEN
  165.           Write('H')
  166.         ELSE
  167.           Write('L');
  168.           ShowVal;
  169.         END;
  170.       | 140H..17EH:
  171.         DEC(reg,140H);
  172.         WriteString('Spr');
  173.         Write(CHAR(reg/8+30H));
  174.         CASE reg REM 8 OF
  175.         | 0: WriteString('Pos');
  176.         | 2: WriteString('Ctl');
  177.         | 4: WriteString('DatA');
  178.         | 6: WriteString('DatB');
  179.         END;
  180.       | 180H..1BEH: WriteString('Color'); WriteInt((reg-180H)/2,1);
  181.       | ELSE  WriteHex(reg,4);
  182.       END; (* case *)
  183.       LastVal:=val;
  184. END ShowReg;
  185.  
  186. PROCEDURE ShowIns(i:CopInsPtr; Level:INTEGER); FORWARD;
  187.  
  188. PROCEDURE DisCopList(c:CopListPtr; Level:INTEGER);
  189. BEGIN
  190.   Spc(Level);
  191.   WriteString('CopList: ');WriteHex(ADR(c^),8); WriteLn;
  192.   IF c#NIL THEN
  193.     IF c^.copIns#NIL THEN
  194.      Spc(Level+2); WriteString('copIns:'); WriteLn;
  195.      ShowIns(c^.copIns,Level+2);
  196.     END;
  197.   END; (* if #NIL *)
  198.   Spc(Level); WriteString('End CopList'); WriteLn;
  199. END DisCopList;
  200.  
  201. PROCEDURE ShowIns(i:CopInsPtr; Level:INTEGER);
  202. VAR op: CARDINAL;
  203. BEGIN
  204.   Spc(Level); WriteString('CopIns: ');WriteHex(ADR(i^),8); WriteLn;
  205.   IF i#NIL THEN
  206.    LOOP
  207.     Spc(Level+2);
  208.     WITH i^ DO
  209.       op:=opCode;
  210.       IF 15 IN CAST(BITSET,op) THEN
  211.         EXCL(CAST(BITSET,op),15);
  212.         WriteString('lof');
  213.       END;
  214.       IF 14 IN CAST(BITSET,op) THEN
  215.         EXCL(CAST(BITSET,op),14);
  216.         WriteString('sht');
  217.       END;
  218.       CASE op OF
  219.       | move:    WriteString('Move $');
  220.               WriteHex(CAST(CARDINAL,destData),4);
  221.               Write(',');
  222.               ShowReg(CAST(CARDINAL,destAddr),CAST(CARDINAL,destData));
  223.               WriteLn;
  224.       | wait:    WriteString('Wait ');
  225.               WriteInt(vWaitPos,3);
  226.               Write(',');
  227.               WriteInt(hWaitPos,3);
  228.               WriteLn;
  229.               IF vWaitPos>1000 THEN EXIT END;
  230.       | next:    WriteString('next:'); WriteLn;
  231.               i:=nxtlist^.copIns;
  232.               DEC(i,SIZE(CopIns)); (* wird gleich wieder erhöht *)
  233.       END;
  234.     END; (* with *);
  235.     INC(i,SIZE(CopIns));
  236.    END; (* LOOP *)
  237.    Spc(Level); WriteString('End CopIns');
  238.    WriteLn;
  239.   END; (* if #NIL *)
  240. END ShowIns;
  241.  
  242. PROCEDURE Dis(cop: MyCopInsPtr):BOOLEAN; (* true = ende hwait -1 *)
  243. VAR Blit, Last:BOOLEAN;
  244.     My: MyCopIns;
  245. BEGIN
  246.   My:=cop^;
  247.   Last:=TRUE;
  248.   WriteString('  ');
  249.   WITH My DO
  250.     IF 0 IN w1 THEN
  251.       IF 15 IN w2 THEN
  252.         Blit:=TRUE;
  253.       ELSE
  254.         Blit:=FALSE;
  255.         INCL(w2,15);
  256.       END;
  257.       EXCL(w1,0);
  258.       IF 0 IN w2 THEN (* skip *)
  259.         EXCL(w2,0);
  260.         WriteString('SKIP ');
  261.       ELSE (* wait *)
  262.         WriteString('WAIT ');
  263.         Last:=(hPos#254);
  264.       END;
  265.       WriteInt(vPos,3); Write(',');
  266.       WriteInt(hPos,3); WriteString(',$');
  267.       WriteHex(vEn,2);
  268.       WriteHex(hEn,2);
  269.       IF Blit THEN
  270.         (* WriteString(', no_Blitter'); *)
  271.       ELSE
  272.         WriteString(', wait_Blitter');
  273.       END;
  274.     ELSE (* move *)
  275.       WriteString('MOVE $');
  276.       WriteHex(data,4);
  277.       Write(',');
  278.       ShowReg(reg,data);
  279.     END; (* if IN *)
  280.   END; (* with My *)
  281.   WriteLn;
  282.   RETURN Last;
  283. END Dis;
  284.  
  285. PROCEDURE ShowIt;
  286. VAR u: UCopListPtr;
  287.     v: ViewPortPtr;
  288. BEGIN
  289.   GfxBase:=ADR(Graphics);
  290.   a:=GfxBase^.actiView^.lofCprList^.start;
  291.   IF a#NIL THEN
  292.     WriteString('View.lofCprLst:'); WriteLn;
  293.     WHILE Dis(a) (* AND (i<50)*) DO
  294.       INC(a,4);
  295.     END;
  296.   END;
  297.   IF Graphics.lace IN GfxBase^.actiView^.modes THEN
  298.     a:=GfxBase^.actiView^.shfCprList^.start;
  299.     IF a#NIL THEN
  300.       WriteString('View.shfCprLst:'); WriteLn;
  301.       WHILE Dis(a) (* AND (i<50)*) DO
  302.         INC(a,4);
  303.       END;
  304.     END;
  305.   END;
  306.   WriteLn;
  307.   v:=GfxBase^.actiView^.viewPort;
  308.   WHILE v#NIL DO
  309.     WriteString('ViewPort: '); WriteHex(CAST(LONGINT,v),8); WriteLn;
  310.     WITH v^ DO
  311.       WriteString('dWidth:'); WriteInt(dWidth,4); WriteLn;
  312.       WriteString('dHeight:'); WriteInt(dHeight,4); WriteLn;
  313.       WriteString('dxOffset:'); WriteInt(dxOffset,4); WriteLn;
  314.       WriteString('dyOffset:'); WriteInt(dyOffset,4); WriteLn;
  315.       WriteString('modes: '); ShowMode(modes); WriteLn;
  316.       IF vpHide IN modes THEN
  317.         WriteString('Hidden!'); WriteLn;
  318.       ELSE
  319.         WriteString('dspIns:'); WriteLn;
  320.         DisCopList(dspIns,0); WriteLn;
  321.         WriteString('sprIns:'); WriteLn;
  322.         DisCopList(sprIns,0); WriteLn;
  323.         WriteString('clrIns:'); WriteLn;
  324.         DisCopList(clrIns,0); WriteLn;
  325.         WriteString('uCopIns:'); WriteLn;
  326.         u:=uCopIns;
  327.         IF u=NIL THEN WriteString('NIL'); WriteLn; END;
  328.         WHILE u#NIL DO
  329.           DisCopList(u^.firstCopList,0);
  330.           u:=u^.next
  331.         END;
  332.       END;
  333.     END; (* with viewPort *)
  334.     WriteLn;
  335.     v:=v^.next;
  336.   END;
  337. END ShowIt;
  338.  
  339. END DisCopper.mod
  340.